SQL语句merge into的用法

应用场景

在批量更新大量的数据时,使用Insert 和Update操作会出现效率低下,甚至卡死的情况。改用 MERGE INTO 代替执行批量更新,会提升执行效率。

merge into将源数据(来源于实际的表,视图,子查询)更新或插入到指定的表中(必须实际存在),好处是避免了多个insert 和update操作。

merge into是一个目标性明确的操作符,不允许在一个merge 语句中对相同的行insert或update操作。

这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于insert+update,尤其是在大数据量面前,效率越明显。

语法

语法如下:

MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE
SET col1 = col1_val1,
    col2 = col2_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);

其中,table_name 指的是更新的表,using()里边的指的是数据来源表/视图/子查询结果集,condition指的是连接条件。
如果满足连接条件,则更新字段;如果连接条件不满足,则停止更新进行插入。

举例

table_a : 计划金额表

table_b : 调整表

table_c : 调整金额表

想要根据调整id,将调整金额累加到计划金额表中。一次更新当年12个月。

MERGE INTO table_a t1 USING (
	SELECT
		m.plan_id,
		m.adjust_money + d.adjust_money adjust_money,
		m.all_money + d.adjust_money all_money
	FROM
		table_a m
	LEFT JOIN table_b a ON m.card_id = a.card_id
	LEFT JOIN table_c d ON a.adjust_id = d.adjust_id
	WHERE
		a.adjust_id = 5
	AND a.comp_code = '100101'
	AND m.year = d.year
) t2 ON (t1.plan_id = t2.plan_id)
WHEN matched THEN
	UPDATE
SET t1.adjust_money = t2.adjust_money,
 t1.all_money = t2.all_money
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peterwanghao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值